又是一年DockerCon,從14年開始關(guān)注Docker,每年的DockerCon都能帶來不少驚(hao)喜(wan)的東西,今年的新玩具應(yīng)該就算是LinuxKit和Moby了。
今天快快的把玩了一下,從yml文件直接打包出一個全新的linux服務(wù)器鏡像的過程非常簡單讓人不禁想起了樂高積木,這次在DockerCon上樂高玩具也被多次推到前臺,甚至演講的背景音樂都好像進了街機廳一樣。像搭積木一樣搭建軟件系統(tǒng),這是多少程序員的夢想,也好像我們從開始寫代碼的那一刻就覺得這才應(yīng)該是軟件最終的形態(tài)…… 而且這事兒看上去也好像沒有那么復(fù)雜,但當(dāng)你寫了幾年代碼后才發(fā)現(xiàn),這不過是個美好的故事。今年,我們似乎向這個目標(biāo)又邁進了一步。
云時代的OS到底會長成什么樣子,這個問題其實是多家云廠商都在找尋的方向。大多數(shù)的云廠商的做法是將大家常用的操作系統(tǒng)一股腦的放到自己的模版庫中。但這里有一個不容忽視的問題:主機時代的操作系統(tǒng)是多用途的,而虛擬化/云計算時代的操作系統(tǒng)則是單一用途的。以前,我們會將多種應(yīng)用盡量部署在同一臺主機上以便節(jié)省資源(因為搭建服務(wù)器是一個辛苦活),這要求我們的操作系統(tǒng)足夠通用化,包含的組件也是向著越來越豐富的方向發(fā)展;而虛擬化和云計算興起以后,我們會盡量在一臺主機上只部署單一應(yīng)用(因為搭建服務(wù)變的無比簡單),以提升應(yīng)用部署速度,響應(yīng)速度和敏捷程度。而原先那種通用化(臃腫)的操作系統(tǒng)就變的不那么合適了,更重要的是,由于那些與應(yīng)用無關(guān)組件的存在,我們必須花費很多不必要的精力來維護這些組件,僅僅是為了能夠讓我們大樓的地基足夠穩(wěn)固 … … 有沒有一種蓋好了大樓再拆掉不需要的地基的做法?這其實就是LinuxKit/NanoServer想要解決的問題。
最近幾年DevOps風(fēng)生水起,IT界非常擅長創(chuàng)造各種新概念,而讓很多人迷失了我們真正需要些什么。無論是敏捷,精益,DevOps還是持續(xù)交付其實我們都在解決同一個問題,那就是效率。
如何才能提高效率,其實基本的思路只有兩個:1. 減小粒度,將復(fù)雜問題簡單化,降低復(fù)雜度,減少為了那些過程復(fù)雜度所付出的管理成本。2. 解耦,給我們的系統(tǒng),團隊足夠自由去按照自己的步調(diào)解決問題,減少他們之間的摩擦,讓我們投入的資源盡量多的轉(zhuǎn)換成生產(chǎn)力。
大家可能感覺這2個話題和LinuxKit/NanoServer沒啥關(guān)系,而實際上關(guān)系很大。這次Docker的做法是一種降維打擊的策略。簡單來說,docker就是一種對技術(shù)棧進行編排的技術(shù),當(dāng)前對于對應(yīng)用層的優(yōu)化已經(jīng)到達一定程度了,那么如何邁出下一步就是個大問題,而對操作系統(tǒng)開刀就是個自然的選擇。LinuxKit通過一個yml文件對操作系統(tǒng)組件進行描述,允許用戶根據(jù)自己的需求動態(tài)創(chuàng)建OS鏡像,這種方式給予了用戶從根本上控制應(yīng)用系統(tǒng)技術(shù)棧的能力。底層的依賴減少了,問題自然少了,運行速度,出錯幾率和安全性都會得到優(yōu)化。這其實將復(fù)雜問題簡單化的一種方式。同時,因為依賴變少,和其他組件的耦合程度也降低。
我們再看一下NanoServer,這是微軟在Server 2016中所提供的一個全新的操作系統(tǒng)發(fā)行版,它同樣允許用戶根據(jù)自己的需要選擇所需要的組件,并動態(tài)生成一個專用的操作系統(tǒng)版本。下面這張圖是Nano Server Image Builder中用來選擇操作系統(tǒng)組件的配置界面:
下面這個是一個linuxkit.yml文件,同樣是用來對操作系統(tǒng)進行組裝:
一個linuxkit.yml文件
是不是有種殊途同歸的感覺,有了這樣的工具,我們不僅僅可以為我們的應(yīng)用定制操作系統(tǒng),而且這個操作系統(tǒng)還會變的非常的小,啟動也更加迅速,更加適合云時代的操作系統(tǒng)特點。像Win Server這樣的系統(tǒng)都可以做到400M的體積和40秒的啟動速度:
Win Server
使用linuxkit更加可以制作出60M左右的操作系統(tǒng)鏡像
這才是使用云時代的操作系統(tǒng)的正確姿勢,這一次,微軟和Docker又想到一起去了。其實我們永遠要記住一點,我們要的不是操作系統(tǒng),我們要的是上面的應(yīng)用。蓋好了大樓然后拆掉地基這種事情可能也只有在軟件行業(yè)才能做到了。